 

#ifndef LOCKDEFS_H_
#define LOCKDEFS_H_

/*
 * LOCKMODE 是一个整数 (1..N)，表示锁类型。 LOCKMASK 是一个位
 * 掩码，表示一组持有或请求的锁类型（位 1<<mode 对应特定的
 * 锁模式）。
 */
typedef int LOCKMASK;
typedef int LOCKMODE;

/*
 * 这些是所有标准锁方法（包括默认和用户）的 LOCKMODE 类型的有效值。
 */

/* NoLock 不是锁模式，而是一个标志值，意味着“不要获取锁” */
#define NoLock					0

#define AccessShareLock			1	/* 选择 */
#define RowShareLock			2	/* SELECT FOR UPDATE/FOR SHARE */
#define RowExclusiveLock		3	/* INSERT, UPDATE, DELETE */
#define ShareUpdateExclusiveLock 4	/* VACUUM（非完整），ANALYZE，CREATE INDEX
									 * 并发 */
#define ShareLock				5	/* CREATE INDEX（不使用并发） */
#define ShareRowExclusiveLock	6	/* 类似于独占模式，但允许行共享 */
#define ExclusiveLock			7	/* 阻塞行共享/选择...用于更新 */
#define AccessExclusiveLock		8	/* ALTER TABLE，DROP TABLE，VACUUM FULL，
									 * 和不带限定符的LOCK TABLE */

#define MaxLockMode				8	/* 最高标准锁模式 */

/* 请参见README.tuplock节“锁定以写入就地更新表” */
#define InplaceUpdateTupleLock ExclusiveLock

/* 表上的AccessExclusiveLock的WAL表示 */
typedef struct xl_standby_lock
{
	TransactionId xid;			/* 持有AccessExclusiveLock的xid */
	Oid			dbOid;			/* 包含表的数据库 */
	Oid			relOid;			/* 表的OID */
} xl_standby_lock;

#endif							/* LOCKDEFS_H_ */
